/*
 *                        .::::.
 *                      .::::::::.
 *                     :::::::::::
 *                  ..:::::::::::'
 *               '::::::::::::'
 *                 .::::::::::
 *            '::::::::::::::..
 *                 ..::::::::::::.
 *               ``::::::::::::::::
 *                ::::``:::::::::'        .:::.
 *               ::::'   ':::::'       .::::::::.
 *             .::::'      ::::     .:::::::'::::.
 *            .:::'       :::::  .:::::::::' ':::::.
 *           .::'        :::::.:::::::::'      ':::::.
 *          .::'         ::::::::::::::'         ``::::.
 *      ...:::           ::::::::::::'              ``::.
 *     ````':.          ':::::::::'                  ::::..
 *                        '.:::::'                    ':'````..
 *
 * @Author: byx
 * @Date: 2022-11-27 00:05:02
 * @LastEditors: byx
 * @LastEditTime: 2022-12-01 18:59:50
 * @version: 1.0
 * @Descripttion: wwww.byx1024.top
 */
import axios from 'axios'
import { getToken, removeToken } from './storage'
import history from './history'
import { message } from 'antd'

export const baseURL = 'http://geek.itheima.net/v1_0/'

// 创建 axios实例
const instance = axios.create({
  baseURL,
  timeout: 5000,
})

// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // 给请求头添加 token
    const token = getToken()
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么（这里只要里面的 data 数据）
    return response.data
  },
  function (error) {
    // 对响应错误做点什么
    // 如果网络超时，也需要做处理，error 中没有response
    if (!error.response) {
      // 暂时这样处理，这样 每个请求都会提示
      message.error('网络繁忙，请稍后重试')
      return Promise.reject('网络繁忙，请稍后重试')
    }
    // 正常情况
    if (error.response.status === 401) {
      // 代表 token 过期了
      // 1.删除token
      removeToken()
      // 2.给提示信息
      message.warn('登录信息过期了', 1)
      // 跳转到登录页
      // 怎么跳转到登录页？
      // -难点：非组件页面，无法使用 Redirect，也无法访问到 history 对象
      // window.location.href = "/login"
      history.push('/login')
    }

    return Promise.reject(error)
  }
)

export default instance
